// 复制文本
export const copyText = (text: string): Promise<{ status: boolean, message: string}> => {
  return new Promise((resolve, reject) => {
    if (!text) return reject({ status: false, message: '没有需要复制的内容！' })

    if (typeof text !== 'string') return reject({ status: false, message: '类型错误，仅支持字符类型！' })

    // 检查是否支持execCommand，如不支持则使用navigator.clipboard拷贝
    if (typeof document.execCommand === 'function') {
      // 以下设置是为了限制用户恶意设置全局盒子模型样式
      const fakeElement = document.createElement('textarea')

      // 防止在IOS上缩放
      fakeElement.style.fontSize = '12pt'

      // 重写盒子模型
      fakeElement.style.border = '0'
      fakeElement.style.padding = '0'
      fakeElement.style.margin = '0'

      // 设置绝对定位，将标签移动出屏幕外面
      fakeElement.style.position = 'absolute'
      fakeElement.style.right = '-9999px'

      // 垂直移动到屏幕相同位置
      const yPosition = window.pageYOffset || document.documentElement.scrollTop
      fakeElement.style.top = `${yPosition}px`

      // 设置为可读
      fakeElement.setAttribute('readonly', '')

      // 赋值
      fakeElement.value = text

      // 添加到根节点
      document.body.appendChild(fakeElement)

      // 选中内容
      fakeElement.select()
      document.execCommand('copy')

      // 拷贝到剪切板之后，移除自身标签
      fakeElement.remove()

      return resolve({ status: true, message: '复制成功！' })
    }

    // navigator.clipboard对象只能在安全网络环境中才能使用(localhost或https)
    if (navigator.clipboard && window.isSecureContext) {
      return navigator.clipboard
        .writeText(text)
        .then(() => {
          resolve({ status: true, message: '复制成功！' })
        })
        .catch(() => {
          reject({ status: false, message: '当前系统不支持复制' })
        })
    }

    return reject({ status: false, message: '当前系统或非环境(HTTPS)不支持复制' })
  })
}